package com.jingdianjichi.auth.common.entity;

import lombok.Data;

import java.io.Serializable;
import java.util.Collections;
import java.util.List;

/**
 * 分页返回的实体
 */
@Data           //提供get set方法
public class PageResult<T> implements Serializable {        //实现序列化接口
    //当前页
    private Integer pageNo = 1;

    //每页数据量
    private Integer pageSize = 20;

    //总数据
    private Integer total = 0;

    //总页数
    private Integer totalPages = 0;

    //数据结果
    private List<T> result = Collections.emptyList();

    /*
        在这个 PageResult 类中，start 和 end 字段用于表示当前页在整个数据集合中的范围（即当前页的起始记录索引和结束记录索引）
        start：
            start 表示当前页的起始记录索引（从1开始计数）。
            计算公式：start = (this.pageSize > 0 ? (this.pageNo - 1) * this.pageSize : 0) + 1
            例如，如果当前页是2，且每页大小为20，那么 start 将会是 21（即第21条记录开始）。

        end：
            end 表示当前页的结束记录索引。
            计算公式：end = (this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0))
            在同样的例子中，若当前页是2，且每页大小为20，那么 end 将会是 40（即当前页的最后一条记录是第40条）。
     */

    //起始标识
    private Integer start = 1;

    //结束标识
    private Integer end = 0;

    //设置返回的数据
    public void setRecords(List<T> result){
        //返回结果
        this.result=result;

        //设置页数
        if (result != null && result.size() > 0 ){
            setTotal(result.size());
        }
    }

    public void setTotal(int total) {
        //总条数
        this.total=total;

        //总页数
        if (this.pageSize > 0){
            this.totalPages = (total/this.pageSize) + (total % this.pageSize == 0 ? 0 :1);
        }else {
            this.totalPages = 0;
        }

        //start,起始
        this.start=(this.pageSize > 0 ? (this.pageNo -1) * this.pageSize : 0) +1;

        //end,结束
        this.end=(this.start - 1 + this.pageSize * (this.pageNo > 0 ? 1 : 0));

    }


    public void setPageSize(Integer pageSize){
        this.pageSize=pageSize;
    }

    public void setPageNo(Integer pageNo){
        this.pageNo=pageNo;
    }
}
